function validateUtils() {
  /**
   * 验证输入的字符串是否为有效的11位手机号码。
   *
   * @param phone - 要验证的手机号码字符串。
   * @returns 如果是有效的11位手机号码，返回 true；否则返回 false。
   */
  function validatePhoneNumber(phone: string): boolean {
    const regex = /^1[3-9]\d{9}$/
    return regex.test(phone)
  }
  /**
   * 验证输入的字符串是否为有效的18位身份证号码。
   *
   * @param idCard - 要验证的身份证号码字符串。
   * @returns 如果是有效的18位身份证号码，返回 true；否则返回 false。
   */
  function validateIdCard(idCard: string): boolean {
    // 去掉未使用的捕获组
    const regex = /^\d{15}$|^\d{18}$|^\d{17}[\dX]$/i
    return regex.test(idCard)
  }

  /**
   * 验证输入的字符串是否为有效的固定电话号码。
   *
   * 固定电话号码格式可以是：
   * 1. 3位区号-8位号码，如 010-12345678
   * 2. 4位区号-7位号码，如 0371-1234567
   * 3. 4位区号-8位号码，如 0371-12345678
   *
   * @param landline - 要验证的固定电话号码字符串。
   * @returns 如果是有效的固定电话号码，返回 true；否则返回 false。
   */
  function validateLandline(landline: string): boolean {
    const regex = /^\d{3}-\d{8}$|^\d{4}-\d{7}$|^\d{4}-\d{8}$/
    return regex.test(landline)
  }
  /**
   * 验证输入的字符串是否为有效的IP地址。
   *
   * @param ip - 要验证的IP地址字符串。
   * @returns 如果是有效的IP地址，返回 true；否则返回 false。
   */
  function validateIp(ip: string): boolean {
    const regex = /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})$/
    return regex.test(ip)
  }
  /**
   * 验证输入的字符串是否为有效的邮箱地址。
   *
   * @param email - 要验证的邮箱地址字符串。
   * @returns 如果是有效的邮箱地址，返回 true；否则返回 false。
   */
  function validateEmail(email: string): boolean {
    const regex = /^[\w.%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i
    return regex.test(email)
  }

  /**
   * 验证输入的字符串是否为有效的密码。
   * 密码必须是英文、数字和标点符号组合，且至少有8位。
   *
   * @param password - 要验证的密码字符串。
   * @returns 如果是有效的密码，返回 true；否则返回 false。
   */
  function validatePassword(password: string): boolean {
    const regex = /^(?=.*[a-z])(?=.*\d)(?=.*[!@#$%^&*(),.?":{}|<>])[A-Z\d!@#$%^&*(),.?":{}|<>]{8,32}$/i
    return regex.test(password)
  }

  return {
    validatePhoneNumber,
    validateIdCard,
    validateLandline,
    validateIp,
    validateEmail,
    validatePassword,
  }
}
export const ValidateUtils = validateUtils()
